El Ecosistema HIP está diseñado como una capa de abstracción ligera para garantizar la compatibilidad de código fuente entre las arquitecturas de AMD y NVIDIA. Utiliza el ROCm (Radeon Open Compute) pila, específicamente aprovechando el arquitectura de sistema heterogéneo (HSA) entorno de tiempo de ejecución y el controlador de fusión de kernels (KFD).
1. Inicialización inicial
La inicialización comienza con intercambios de mensajes de bajo nivel entre controladores de kernel mediante hsa_init(0, ...) y hsaKmtOpenKFD(...). Estas llamadas de establecimiento crean el puente de comunicación entre las aplicaciones en espacio de usuario y el hardware de GPU de AMD.
2. Descubrimiento de topología y propiedades
Antes de lanzar kernels, el entorno de tiempo de ejecución identifica las capacidades del hardware usando hsaKmtAcquireSystemProperties y hsaKmtGetNodeProperties. Mapea la memoria física a nodos de GPU usando hsaKmtMapMemoryToGPUNodes, asegurando la visibilidad de la tabla de páginas para el dispositivo.
3. El pipeline de compilación
El puente entre CUDA y HIP se basa en dos pilares: hipify-perl (transpilador basado en expresiones regulares) y hipcc (envoltorio de compilador).
hipify-perl square.cu > square.cpp
hipcc square.cpp -o square.out
4. Lógica de versiones
La compatibilidad se garantiza mediante una fórmula precisa para asegurar que hipRuntimeGetVersion coincida con las tablas de extensiones HSA:
$$\text{HIP\_VERSION} = \text{MAJOR} \times 10^7 + \text{MINOR} \times 10^5 + \text{PATCH}$$